home *** CD-ROM | disk | FTP | other *** search
- comment $
-
- █████ ████ █████▀████ █████▀████ █████▀████ ████▀████ ████ █████▀████ █████▀████
- █████ ████ █████ ████ █████ ████ █████ ████ ████ ████ ████ █████ ████ █████ ████
- █████ ████ █████ ▄▄▄▄ █████ ████ █████ ▄▄▄▄ ████ ████ █████ ████ █████ ████
- █████▀████ █████▀████ █████▀█▀▀▀ █████▀████ ████ ████ █████ ████ █████
- █████ ███▓ █████ ▄▄▄▄ █████ ███▓ █████ ▄▄▄▄ ███▓ ███▓ █████ ▄▄▄▄ █████████▓
- █████ ██▓▒ █████ ██▓▒ █████ ██▓▒ █████ ██▓▒ ██▓▒ ██▓▒ █████ ██▓▒ ▄▄▄▄▄ ██▓▒
- █████ █▓▒░ █████▄█▓▒░ █████ █▓▒░ █████▄█▓▒░ █▓▒░ █▓▒░ █████▄█▓▒░ █████▄█▓▒░
- -cb
-
- ∙■ H E R E T I C S ' 9 4 ■∙
-
- present:
-
- Liquid Metal BBS Advertisement v1.10
-
- coded by Black Artist
-
- a long, long time ago...
-
- v1.10 updated 5th September 1994
-
- ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-
- erm..... make of this what you will - this was coded quite a while
- ago and was left uncommented, when I went to update it I thought I
- would release the source, but I can't be bothered to go through it
- and comment it decently. Some of the code is shocking, but for an
- effect that is inherently so fast, even the sloppiest of code will
- run at full frame rate.
-
- I hope this helps somebody LEARN. However do not be so lame as to
- try and simply RIP this code - if you are stupid enough to do so
- and try and release something using even portions of this code and
- call it your own, I will personally come and ram bugs down your
- throat. Actually, I wouldn't bother, because it's such a unique
- effect (I haven't seen anything like it) and also so simple, that
- everyone will laugh at you. (And the sky will turn green, the devil
- will rise up and drag you down into the eternal pits of ..er...well
- bad things will happen.) :)
-
- Well I'm sick of writing this so i will stop.
-
- btw for all you ppl in the USA, the 5/9/94 does NOT mean 9th May :)
-
-
- Yoong-Chert Foo
- Black Artist / Heretics
- 5th September 1994
-
- ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-
- this requires a 386 as it uses a couple of 386 instructions, but it
- could very easily be converted for 286 or even 8088 instructions if
- you were very, very bored and poor :)
-
- a VGA is mandatory, and if you want to hear some music you need
- something capable of producing Adlib FM sounds - btw SBOS works but
- some bits sound out of tune
-
- everything is done by me apart from the music system [chicken] and
- the music [?? - came with HSC tracker]
-
- quick greetings to the cool ppl on IRC - you know who you are :-)
-
- for smallest size, link with microsoft link and use /e
-
- $
-
- display "DO NOT ASSEMBLE WITH TASM 4.0!!!!!! (will crash)"
-
- ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-
-
- .386
- model compact
-
- extrn _hscplayer:far
-
- assume cs:only,ds:nothing,es:nothing,fs:nothing,gs:nothing
-
- screenwidth equ 144
- screenstart equ 129*screenwidth
-
- stack 128
-
- ;─────────────────────────────────────────────────────────────────────────────
- p1 segment para use16
- p1buf label byte
- include back1.db
- db screenwidth*152 dup (?)
- p1 ends
- ;─────────────────────────────────────────────────────────────────────────────
- p2 segment para use16
- p2buf label byte
- include back2.db
- db screenwidth*152 dup (?)
- p2 ends
- ;─────────────────────────────────────────────────────────────────────────────
- p3 segment para use16
- p3buf label byte
- include back3.db
- db screenwidth*152 dup (?)
- p3 ends
- ;─────────────────────────────────────────────────────────────────────────────
- p4 segment para use16
- p4buf label byte
- include back4.db
- db (screenwidth*152-768-24) dup (?)
- palette label word
- db 0,0,0
- i=0
- rept 15
- db i*3+18,i*2+18,0
- i=i+1
- endm
- i=0
- rept 64
- db 0,0,i
- i=i+1
- endm
- i=0
- rept 32
- db i,0,63
- i=i+2
- endm
- i=0
- rept 64
- db 63,i,63-i
- i=i+1
- endm
- i=0
- rept 64
- db 63,63,i+16
- i=i+1
- endm
- db 16 dup (63,63,63)
- xdata db 5fh,4fh,50h,82h,54h,80h,0dh,3eh,00h,01h,00h,00h
- db 73h,0ffh,00h,00h,0eah,8ch,0dfh,48h,00h,0e7h,06h,0e3h
- p4 ends
- ;─────────────────────────────────────────────────────────────────────────────
- music segment use16
- muzak label byte
- include music.db
- music ends
- ;─────────────────────────────────────────────────────────────────────────────
-
- only segment use16
-
- planesegs label word
- p1bufseg dw seg p1buf
- p2bufseg dw seg p2buf
- p3bufseg dw seg p3buf
- p4bufseg dw seg p4buf
-
- chardata dw ?,?
-
- include lisa.db
-
- ; ───────────────────────────General─Initialisation───────────────────────────
- bobinit proc
-
- mov ax,13h
- int 10h
-
- mov dx,03c8h
- xor al,al
- out dx,al
- mov cx,768
- inc dx
- wipepal: out dx,al
- loop wipepal
-
- mov dx,03c4h
- mov ax,00604h
- out dx,ax
- mov ax,00100h
- out dx,ax
- mov dx,03c2h
- mov al,0e3h
- out dx,al
- mov dx,03c4h
- mov ax,00300h
- out dx,ax
-
- mov dx,03d4h
- mov al,11h
- out dx,al
- inc dx
- in al,dx
- and al,7fh
- out dx,al
-
- mov dx,03d4h
- xor al,al
- mov ds,p4bufseg
- mov si,offset xdata
- mov cx,24
- xloop: mov ah,ds:[si]
- out dx,ax
- inc al
- inc si
- loop xloop
-
- mov dx,03c0h
- mov al,10h
- out dx,al
- mov al,61h
- out dx,al
- mov al,013h
- out dx,al
- mov al,6
- out dx,al
-
- mov ds,p4bufseg
- mov si,offset palette
- mov dx,03c8h
- xor al,al
- out dx,al
- mov cx,768
- inc dx
- rep outsb
-
- xor bx,bx
- fillplane: mov ax,planesegs[bx]
- mov ds,ax
- mov es,ax
- mov di,18
- mov dh,7
- fillbuf: xor si,si
- mov cx,56
- fillline: movsd
- movsd
- movsd
- movsd
- movsw
- add si,screenwidth-18
- add di,screenwidth-18
- loop fillline
- sub di,56*screenwidth-18
- dec dh
- jnz fillbuf
- xor si,si
- mov di,56*screenwidth
- mov cx,5472
- rep movsd
- inc bx
- inc bx
- cmp bx,8
- jb fillplane
-
- mov ax,1102h
- mov dx,3c4h
- out dx,ax
- mov bx,1104h
- mov ax,0a000h
- mov es,ax
- xor bp,bp
- copyplane: mov ds,planesegs[bp]
- mov dl,7
- mov di,16*screenwidth
- copyrow: xor si,si
- mov cx,2016
- rep movsd
- dec dl
- jnz copyrow
- xor si,si
- mov cx,1440
- rep movsd
-
- dec bl
- jz copied
- rol bh,1
- mov al,bh
- mov dx,03c5h
- out dx,al
- inc bp
- inc bp
- jmp copyplane
- copied:
-
-
- mov ax,1130h
- mov bh,6
- int 10h
- mov chardata,bp
- mov chardata+2,es
-
- ret
-
- bobinit endp
-
-
- ; ┌────────────────────────────Write─8*16─Char───────────────────────────────
- ; │ writechar wants : es:di -> offset
- ; │ ds:si -> chardata
- ; │ bx -> character
-
- planesel db ?
- counter db ?
-
- writechar proc
-
- shl bx,4
-
- mov ax,1102h
- mov dx,03c4h
- out dx,ax
- mov word ptr planesel,0411h
- xor bp,bp
- mov dx,8008h
-
- writeplane: xor ax,ax
- test byte ptr ds:[si+bx],dl
- jz clear1
- mov ah,bl
- clear1: test byte ptr ds:[si+bx],dh
- jz clear2
- mov al,bl
- clear2: and ax,0f0fh
- mov word ptr es:[di+bp],ax
- inc bx
- add bp,screenwidth
- cmp bp,16*screenwidth
- jb writeplane
-
- dec counter
- jz allwritten
- shr dx,1
- mov bp,dx
- sub bx,16
- rol planesel,1
- mov dx,03c5h
- mov al,planesel
- out dx,al
- mov dx,bp
- xor bp,bp
- jmp writeplane
-
- allwritten: ret
-
- writechar endp
-
-
- ; ┌──────────────────────────────Draw─Bob─Routine────────────────────────────
- ; │ Bob wants : dx -> x value
- ; │ bx -> y value * screenwidth
- ; │ eax -> add value
-
- drawbob proc
-
- mov cx,dx
- shr dx,1
- jc @1or3
- shr dx,1
- jc @2
- mov ds,p1bufseg
- mov es,p2bufseg
- mov fs,p3bufseg
- mov gs,p4bufseg
- xor si,si
- xor di,di
- jmp @shadein
-
- @2: mov ds,p3bufseg
- mov es,p4bufseg
- mov fs,p1bufseg
- mov gs,p2bufseg
- mov si,1
- mov di,1
- jmp @shadein
-
- @1or3: shr dx,1
- jc @3
- mov ds,p2bufseg
- mov es,p3bufseg
- mov fs,p4bufseg
- mov gs,p1bufseg
- xor si,si
- mov di,1
- jmp @shadein
-
- @3: mov ds,p1bufseg
- mov es,p2bufseg
- mov fs,p3bufseg
- mov gs,p4bufseg
- xor si,si
- mov di,-1
- inc dl
-
- @shadein: add bx,dx
-
- add dword ptr ds:[bx],eax
- add dword ptr es:[bx],eax
- add dword ptr fs:[bx+si],eax
- add dword ptr gs:[bx+di],eax
-
- add dword ptr ds:[bx+screenwidth],eax
- add dword ptr es:[bx+screenwidth],eax
- add dword ptr fs:[bx+si+screenwidth],eax
- add dword ptr gs:[bx+di+screenwidth],eax
-
- add dword ptr ds:[bx+screenwidth*2],eax
- add dword ptr es:[bx+screenwidth*2],eax
- add dword ptr fs:[bx+si+screenwidth*2],eax
- add dword ptr gs:[bx+di+screenwidth*2],eax
-
- add dword ptr ds:[bx+screenwidth*3],eax
- add dword ptr es:[bx+screenwidth*3],eax
- add dword ptr fs:[bx+si+screenwidth*3],eax
- add dword ptr gs:[bx+di+screenwidth*3],eax
-
- add dword ptr ds:[bx+screenwidth*4],eax
- add dword ptr es:[bx+screenwidth*4],eax
- add dword ptr fs:[bx+si+screenwidth*4],eax
- add dword ptr gs:[bx+di+screenwidth*4],eax
-
- add dword ptr ds:[bx+screenwidth*5],eax
- add dword ptr es:[bx+screenwidth*5],eax
- add dword ptr fs:[bx+si+screenwidth*5],eax
- add dword ptr gs:[bx+di+screenwidth*5],eax
-
- add dword ptr ds:[bx+screenwidth*6],eax
- add dword ptr es:[bx+screenwidth*6],eax
- add dword ptr fs:[bx+si+screenwidth*6],eax
- add dword ptr gs:[bx+di+screenwidth*6],eax
-
- add dword ptr ds:[bx+screenwidth*7],eax
- add dword ptr es:[bx+screenwidth*7],eax
- add dword ptr fs:[bx+si+screenwidth*7],eax
- add dword ptr gs:[bx+di+screenwidth*7],eax
-
- add dword ptr ds:[bx+screenwidth*8],eax
- add dword ptr es:[bx+screenwidth*8],eax
- add dword ptr fs:[bx+si+screenwidth*8],eax
- add dword ptr gs:[bx+di+screenwidth*8],eax
-
- add dword ptr ds:[bx+screenwidth*9],eax
- add dword ptr es:[bx+screenwidth*9],eax
- add dword ptr fs:[bx+si+screenwidth*9],eax
- add dword ptr gs:[bx+di+screenwidth*9],eax
-
- add dword ptr ds:[bx+screenwidth*10],eax
- add dword ptr es:[bx+screenwidth*10],eax
- add dword ptr fs:[bx+si+screenwidth*10],eax
- add dword ptr gs:[bx+di+screenwidth*10],eax
-
- add dword ptr ds:[bx+screenwidth*11],eax
- add dword ptr es:[bx+screenwidth*11],eax
- add dword ptr fs:[bx+si+screenwidth*11],eax
- add dword ptr gs:[bx+di+screenwidth*11],eax
-
- add dword ptr ds:[bx+screenwidth*12],eax
- add dword ptr es:[bx+screenwidth*12],eax
- add dword ptr fs:[bx+si+screenwidth*12],eax
- add dword ptr gs:[bx+di+screenwidth*12],eax
-
- add dword ptr ds:[bx+screenwidth*13],eax
- add dword ptr es:[bx+screenwidth*13],eax
- add dword ptr fs:[bx+si+screenwidth*13],eax
- add dword ptr gs:[bx+di+screenwidth*13],eax
-
- add dword ptr ds:[bx+screenwidth*14],eax
- add dword ptr es:[bx+screenwidth*14],eax
- add dword ptr fs:[bx+si+screenwidth*14],eax
- add dword ptr gs:[bx+di+screenwidth*14],eax
-
- add dword ptr ds:[bx+screenwidth*15],eax
- add dword ptr es:[bx+screenwidth*15],eax
- add dword ptr fs:[bx+si+screenwidth*15],eax
- add dword ptr gs:[bx+di+screenwidth*15],eax
-
- cmp di,-1
- jne @drawin
- dec bx
-
- @drawin: mov ax,1102h
- and cx,3
- shl ah,cl
- mov bp,cx
- shl bp,1
- mov dx,03c4h
- out dx,ax
-
- mov ch,ah
- mov cl,4
- mov ax,0a000h
- mov es,ax
- mov di,bx
-
- @copyplane: mov ds,planesegs[bp]
- mov eax,dword ptr ds:[di]
- mov dword ptr es:[di+screenstart],eax
- mov eax,dword ptr ds:[di+screenwidth]
- mov dword ptr es:[di+screenstart+screenwidth],eax
- mov eax,dword ptr ds:[di+screenwidth*2]
- mov dword ptr es:[di+screenstart+screenwidth*2],eax
- mov eax,dword ptr ds:[di+screenwidth*3]
- mov dword ptr es:[di+screenstart+screenwidth*3],eax
- mov eax,dword ptr ds:[di+screenwidth*4]
- mov dword ptr es:[di+screenstart+screenwidth*4],eax
- mov eax,dword ptr ds:[di+screenwidth*5]
- mov dword ptr es:[di+screenstart+screenwidth*5],eax
- mov eax,dword ptr ds:[di+screenwidth*6]
- mov dword ptr es:[di+screenstart+screenwidth*6],eax
- mov eax,dword ptr ds:[di+screenwidth*7]
- mov dword ptr es:[di+screenstart+screenwidth*7],eax
- mov eax,dword ptr ds:[di+screenwidth*8]
- mov dword ptr es:[di+screenstart+screenwidth*8],eax
- mov eax,dword ptr ds:[di+screenwidth*9]
- mov dword ptr es:[di+screenstart+screenwidth*9],eax
- mov eax,dword ptr ds:[di+screenwidth*10]
- mov dword ptr es:[di+screenstart+screenwidth*10],eax
- mov eax,dword ptr ds:[di+screenwidth*11]
- mov dword ptr es:[di+screenstart+screenwidth*11],eax
- mov eax,dword ptr ds:[di+screenwidth*12]
- mov dword ptr es:[di+screenstart+screenwidth*12],eax
- mov eax,dword ptr ds:[di+screenwidth*13]
- mov dword ptr es:[di+screenstart+screenwidth*13],eax
- mov eax,dword ptr ds:[di+screenwidth*14]
- mov dword ptr es:[di+screenstart+screenwidth*14],eax
- mov eax,dword ptr ds:[di+screenwidth*15]
- mov dword ptr es:[di+screenstart+screenwidth*15],eax
-
- dec cl
- jz @alldone
- rol ch,1
- mov dx,03c5h
- mov al,ch
- out dx,al
- cmp al,12h
- inc bp
- inc bp
- jnc @copyplane
- inc di
- xor bp,bp
- jmp @copyplane
- @alldone: ret
-
- drawbob endp
-
- ; ┌──────────────────────────Set─Window─Location──────────────────────────────
- ; │ SetWindow needs cx-->x
- ; │ dx-->y * screenwidth
-
- setwindow proc
- mov bx,cx
- shr cx,2
- add cx,dx
-
- mov dx,03dah
- @setwindowsync: in al,dx
- and al,08h
- jnz @setwindowsync
-
- mov dx,03d4h
- mov al,00dh
- mov ah,cl
- out dx,ax
-
- dec al
- ;mov al,00ch
- mov ah,ch
- out dx,ax
-
- mov dx,03dah
- @ksyncagain: in al,dx
- and al,08h
- jz @ksyncagain
-
- mov dx,03c0h
- mov al,033h
- out dx,al
-
- mov al,bl
- and al,3
- shl al,1
- out dx,al
-
- ret
-
- setwindow endp
-
-
- ; ──────────────────────────────Main─Variables─────────────────────────────────
- anglex dw 0
- angley dw 0
- backx dw 0
- backy dw 0
- viewx dw 0
- viewy dw 0
- coeffxdir dw 1
- coeffydir dw -1
- coeffx dw 2 ;starting rate of change in x
- coeffy dw 3 ;starting rate of change in y
- bobcounter dw 0
- jerkbits equ 7
- ; ────────────────────────────Parameters─for─Bob───────────────────────────────
- coeffxmax equ 4 ;max rate of change of x
- coeffymax equ 5 ;max rate of change of y
- boblength equ 450 ;length of Bob in squares
- viewdelay equ 32 ;how many squares behind Bob's head camera views
- fastjerkbits equ 7 ;how many squares drawn per scroll (70Hz)-fast
- slowjerkbits equ 3 ;how many squares drawn per scroll (70Hz)-slow
- patternlength equ 2800 ;5secs*8jerks*70fps
- ; 40characters wide - 0123456789012345678901234567890123456789
- message db 'Liquid Metal +61∙7∙201∙5242 28k824hrs'
- db ' ■ Heretics WHQ ■ Sysop: Chuck Biscuits '
- db 'Australia''s best demoboard - Aust HQ for'
- db 'KLF EMF Iguana/VangeliSTeam Admire'
- db 'Psychic Monks Mental Design sYmptom '
- db 'Surprise! Prod. VLA Digital Infinity'
- db ' distro site for Inertia Player DMP '
- db 'iCE member board DiE ANSi member board'
- db 'This Adv 100% ASM by Black Artist 5∙9∙94'
- db '& uses HSC-Tracker by Chicken (<-greetz)'
- messagelength equ $-message
- signoff db 'Call Liquid Metal: +61∙7∙201∙5242 28k8 All Hours - Australia''s finest demoboard',0ah,0dh
- db ' ■ Heretics WHQ ■ Sysop: Chuck Biscuits [Heretics/iCE/Dissonance Co-Editor]',0ah,0dh,0ah,0dh
- db 'this BBS Advertisement v1.10 coded by Black Artist/Heretics, 5th September 1994',0ah,0dh
- db '$'
-
-
- messagecount dw 0
- ; ──────────────────────────────Main─Procedure─────────────────────────────────
- main proc
-
- call bobinit
-
- mov ah,4
- xor bx,bx
- call _hscplayer
- mov ax,seg muzak
- mov es,ax
- mov si,offset muzak
- xor ah,ah
- mov bx,0101h
- call _hscplayer
-
- lds si,dword ptr chardata
- mov ax,0a000h
- mov es,ax
- mov cx,40
- xor di,di
- wipeline: mov bx,'█'
- call writechar
- inc di
- inc di
- loop wipeline
-
- keepgoing: cmp bobcounter,64
- ja dontslideon
- mov bx,bobcounter
- shr bx,1
- mov ax,0e418h
- sub ah,bl
- mov dx,03d4h
- out dx,ax
- dontslideon: cmp bobcounter,patternlength-512
- jb dontslideoff
- mov bx,bobcounter
- sub bx,patternlength-512
- shr bx,4
- mov ax,0c418h
- add ah,bl
- mov dx,03d4h
- out dx,ax
-
- dontslideoff: cmp bobcounter,patternlength-boblength
- jae dontdraw
- mov si,cs:[anglex]
- movzx dx,lisax[si]
- add dx,153
- mov si,cs:[angley]
- mov al,screenwidth
- mul lisay[si]
- mov bx,ax
- mov eax,02020202h
- call drawbob
-
- mov ax,cs:[anglex]
- add ax,coeffx
- cmp ax,1256
- jb @nomodx
- sub ax,1256
- @nomodx: mov cs:[anglex],ax
- mov ax,cs:[angley]
- add ax,coeffy
- cmp ax,1256
- jb @nomody
- sub ax,1256
- @nomody: mov cs:[angley],ax
-
- dontdraw: mov ax,jerkbits
- test bobcounter,ax
- jnz noview
-
- mov ah,1
- call _hscplayer
-
- mov si,cs:[viewx]
- movzx cx,lisax[si]
- mov si,cs:[viewy]
- mov al,screenwidth
- mul lisay[si]
- mov dx,16*screenwidth
- add dx,ax
- call setwindow
-
- noview: cmp bobcounter,viewdelay
- jb dontmove
- cmp bobcounter,patternlength-boblength+viewdelay
- jae dontmove
- mov ax,cs:[viewx]
- add ax,coeffx
- cmp ax,1256
- jb @nomodvx
- sub ax,1256
- @nomodvx: mov cs:[viewx],ax
- mov ax,cs:[viewy]
- add ax,coeffy
- cmp ax,1256
- jb @nomodvy
- sub ax,1256
- @nomodvy: mov cs:[viewy],ax
-
- dontmove: cmp bobcounter,boblength
- jb notyet
- mov si,cs:[backx]
- movzx dx,lisax[si]
- add dx,153
- mov si,cs:[backy]
- mov al,screenwidth
- mul lisay[si]
- mov bx,ax
- mov eax,-02020202h
- call drawbob
-
- mov ax,cs:[backx]
- add ax,coeffx
- cmp ax,1256
- jb @nomodbx
- sub ax,1256
- @nomodbx: mov cs:[backx],ax
- mov ax,cs:[backy]
- add ax,coeffy
- cmp ax,1256
- jb @nomodby
- sub ax,1256
- @nomodby: mov cs:[backy],ax
-
- notyet: inc bobcounter
- cmp bobcounter,patternlength
- jb dontchange
-
- mov bobcounter,0
-
- mov ax,coeffx
- add ax,coeffxdir
- jz changexdir
- cmp ax,coeffxmax
- jbe dontchangexdir
- changexdir: neg coeffxdir
- add ax,coeffxdir
- add ax,coeffxdir
- dontchangexdir: mov coeffx,ax
- mov bx,ax
-
- mov ax,coeffy
- add ax,coeffydir
- jz changeydir
- cmp ax,coeffymax
- jbe dontchangeydir
- changeydir: neg coeffydir
- add ax,coeffydir
- add ax,coeffydir
- dontchangeydir: mov coeffy,ax
-
- lds si,dword ptr chardata
- mov ax,0a000h
- mov es,ax
- mov di,-screenwidth
- cmp messagecount,messagelength
- jb dontwrap
- mov messagecount,0
- dontwrap: mov cx,40
-
- nextchar: mov bp,messagecount
- movzx bx,message[bp]
- call writechar
- inc di
- inc di
- inc messagecount
- loop nextchar
-
- dontchange: in al,60h
- cmp al,1
- jne keepgoing
-
- outtahere: mov ax,3
- int 10h
-
- mov ah,2
- call _hscplayer
-
- mov ax,cs
- mov ds,ax
- mov ah,9
- mov dx,offset signoff
- int 21h
- mov ax,4c00h
- int 21h
-
- main endp
-
- only ends
-
- end main
-